import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:get/get.dart';

import 'index.dart';
import 'widgets/index.dart';
import '../../home/home_index/index.dart';
import '../../activtity/activity_index/index.dart';
import '../../activtity/activite_pubilsh/index.dart';
import '../../ai/index.dart';
import '../../my/my_index/index.dart';
import '../../../common/utils/index.dart';

class MainPage extends StatefulWidget {
  const MainPage({Key? key}) : super(key: key);

  @override
  State<MainPage> createState() => _MainPageState();
}

class _MainPageState extends State<MainPage>
    with AutomaticKeepAliveClientMixin, WidgetsBindingObserver {
  @override
  bool get wantKeepAlive => true;

  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this);
  }

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
  }

  @override
  void didUpdateWidget(MainPage oldWidget) {
    super.didUpdateWidget(oldWidget);
  }

  @override
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
    super.dispose();
  }

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    // 生命周期状态变化
  }

  @override
  Widget build(BuildContext context) {
    super.build(context);
    return const _MainViewGetX();
  }
}

class _MainViewGetX extends GetView<MainController> {
  const _MainViewGetX({Key? key}) : super(key: key);

  // 上次按返回键的时间
  static DateTime? _lastBackPressed;
  
  // 退出提示的持续时间（2秒内再次按返回键才退出）
  static const Duration _exitTimeLimit = Duration(seconds: 2);
  

  // 构建主要内容区域 - 使用IndexedStack保持页面状态
  Widget _buildMainContent() {
    return Obx(() {
      final currentIdx = controller.currentIndex.value;
      
      // 🎯 使用IndexedStack保持所有页面状态，避免切换时重建
      return RepaintBoundary(
        child: IndexedStack(
          index: currentIdx,
          // 🔑 关键：sizing参数控制非活动页面的尺寸行为
          // StackFit.expand 让所有页面都占满空间（即使不可见）
          sizing: StackFit.expand,
          children: [
            // 0: 首页
            RepaintBoundary(
              child: GetBuilder<HomeIndexController>(
                id: "home_index",
                builder: (homeController) {
                  return const HomeIndexPage();
                },
              ),
            ),
            // 1: 一起玩
            RepaintBoundary(
              child: GetBuilder<ActivityIndexController>(
                id: "activity_index",
                builder: (activityController) {
                  return const ActivityIndexPage();
                },
              ),
            ),
            // 2: 发布
            RepaintBoundary(
              child: GetBuilder<ActivitePubilshController>(
                id: "activite_pubilsh",
                builder: (publishController) {
                  return const ActivitePubilshPage();
                },
              ),
            ),
            // 3: 我的
            RepaintBoundary(
              child: GetBuilder<MyIndexController>(
                id: "my_index",
                builder: (myController) {
                  return const MyIndexPage();
                },
              ),
            ),
            // 4: AI
            RepaintBoundary(
              child: GetBuilder<AiController>(
                id: "ai",
                builder: (aiController) {
                  return const AiPage();
                },
              ),
            ),
          ],
        ),
      );
    });
  }



  /// 处理返回键按下事件
  Future<bool> _onWillPop() async {
    final now = DateTime.now();
    
    // 如果是第一次按返回键，或者距离上次按返回键超过了时间限制
    if (_lastBackPressed == null || 
        now.difference(_lastBackPressed!) > _exitTimeLimit) {
      
      // 记录这次按键时间
      _lastBackPressed = now;
      
      // 显示退出提示
      _showExitHint();
      
      // 不退出应用
      return false;
    }
    
    // 第二次按返回键且在时间限制内，退出应用
    controller.printRouteHistory(); // 打印调试信息
    debugPrint('🚪 用户确认退出应用');
    _exitApp();
    return true;
  }
  
  /// 显示退出提示
  void _showExitHint() {
    debugPrint('🔙 用户按下返回键，显示退出提示');
    
    Get.snackbar(
      '',  // 空标题
      '再按一次退出',
      snackPosition: SnackPosition.BOTTOM,
      backgroundColor: Colors.black87,
      colorText: Colors.white,
      margin: const EdgeInsets.only(left: 100, right: 100, bottom: 120),
      borderRadius: 12,
      duration: _exitTimeLimit,
      isDismissible: true,
      animationDuration: const Duration(milliseconds: 200),
      // 关键：通过padding调节高度
      padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 8), // 减小垂直padding降低高度
      titleText: const SizedBox.shrink(), // 隐藏标题区域
      messageText: Container(
        height: 24, // 关键：直接设置容器高度
        alignment: Alignment.center,
        child: const Text(
          '再按一次退出',
          style: TextStyle(
            color: Colors.white,
            fontSize: 12,
            height: 1.0, // 设置行高倍数，减小文字占用高度
          ),
          textAlign: TextAlign.center,
        ),
      ),
    );
  }
  
  /// 退出应用
  void _exitApp() {
    debugPrint('👋 应用即将退出');
    
    // 先隐藏可能存在的snackbar
    Get.closeAllSnackbars();
    
    // 退出应用
    // 在Android上使用SystemNavigator.pop()
    // 在iOS上这个方法不会真正退出应用（iOS不允许应用自行退出）
    SystemNavigator.pop();
  }

  @override
  Widget build(BuildContext context) {
    // 🎯 只在首次构建时设置状态栏，避免重复设置导致闪屏
    // 移到initState或在路由切换时设置会更好，但这里先优化为条件设置
    SystemUIUtils.setTransparentStatusBarDark();
    
    // 🎯 移除GetBuilder外层包装，直接使用Scaffold
    // 因为IndexedStack内部已经使用了Obx来监听currentIndex的变化
    // 不需要GetBuilder来触发整个页面的重建
    return WillPopScope(
      onWillPop: _onWillPop,
      child: Scaffold(
        // appBar: AppBar(
        //   title: Obx(() => Text(controller.currentPageTitle.value)),
        //   centerTitle: true,
        //   backgroundColor: Colors.blue.shade700,
        //   foregroundColor: Colors.white,
        //   elevation: 0,
        // ),
        body: _buildMainContent(),
        bottomNavigationBar: const FloatingBottomNavigationBar(),
      ),
    );
  }
}
